home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / TinyGL / ami / content / ad709 / tinygl / src / zbuffer.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-15  |  4.4 KB  |  138 lines

  1. /*$T zbuffer.h GC 1.137 08/09/02 17:47:18 */
  2.  
  3. /*$6
  4.  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5.  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  6.  */
  7.  
  8. #ifndef _tgl_zbuffer_h_
  9.     #define _tgl_zbuffer_h_
  10.  
  11. /* Z buffer */
  12.     #include "zfeatures.h"
  13.  
  14.     #define ZB_Z_BITS                16
  15.  
  16.     #define ZB_POINT_Z_FRAC_BITS    14
  17.  
  18.     #define ZB_POINT_S_MIN            ((1 << 13))
  19.     #define ZB_POINT_S_MAX            ((1 << 22) - (1 << 13))
  20.     #define ZB_POINT_T_MIN            ((1 << 21))
  21.     #define ZB_POINT_T_MAX            ((1 << 30) - (1 << 21))
  22.     #define ZB_POINT_RED_MIN        ((1 << 10))
  23.     #define ZB_POINT_RED_MAX        ((1 << 16) - (1 << 10))
  24.     #define ZB_POINT_GREEN_MIN        ((1 << 9))
  25.     #define ZB_POINT_GREEN_MAX        ((1 << 16) - (1 << 9))
  26.     #define ZB_POINT_BLUE_MIN        ((1 << 10))
  27.     #define ZB_POINT_BLUE_MAX        ((1 << 16) - (1 << 10))
  28.  
  29. /* display modes */
  30.     #define ZB_MODE_5R6G5B    1                /* true color 16 bits */
  31.     #define ZB_MODE_INDEX    2                /* color index 8 bits */
  32.     #define ZB_MODE_RGBA    3                /* 32 bit rgba mode */
  33.     #define ZB_MODE_RGB24    4                /* 24 bit rgb mode */
  34.     #define ZB_NB_COLORS    225                /* number of colors for 8 bit display */
  35.  
  36.     #if TGL_FEATURE_RENDER_BITS == 15
  37.         #define RGB_TO_PIXEL(r, g, b)    ((((r) >> 1) & 0x7c00) | (((g) >> 6) & 0x03e0) | ((b) >> 11))
  38. typedef unsigned short    PIXEL;
  39.  
  40. /* bytes per pixel */
  41.         #define PSZB    2
  42.  
  43. /* bits per pixel = (1 << PSZH) */
  44.         #define PSZSH    4
  45.  
  46.     #elif TGL_FEATURE_RENDER_BITS == 16
  47.  
  48. /* 16 bit mode */
  49.         #define BLUE16    31
  50.         #define GREEN16 0x07E0
  51.         #define RED16    0xF800
  52.  
  53.         #define PIXEL_TO_RGB(pixel, r, g, b) { \
  54.         r = pixel & RED16; \
  55.         g = (pixel & GREEN16) << 5; \
  56.         b = (pixel & BLUE16) << 11; \
  57.     }
  58.  
  59.         #define RGB_TO_PIXEL(r, g, b)    (((r) & RED16) | (((g) >> 5) & GREEN16) | ((b) >> 11))
  60.  
  61. typedef unsigned short    PIXEL;
  62.         #define PSZB    2
  63.         #define PSZSH    4
  64.  
  65.     #elif TGL_FEATURE_RENDER_BITS == 24
  66.         #define RGB_TO_PIXEL(r, g, b)    ((((r) << 8) & 0xff0000) | ((g) & 0xff00) | ((b) >> 8))
  67. typedef unsigned char    PIXEL;
  68.         #define PSZB    3
  69.         #define PSZSH    5
  70.  
  71.     #elif TGL_FEATURE_RENDER_BITS == 32
  72.         #define RGB_TO_PIXEL(r, g, b)    ((((r) << 8) & 0xff0000) | ((g) & 0xff00) | ((b) >> 8))
  73. typedef unsigned int    PIXEL;
  74.         #define PSZB    4
  75.         #define PSZSH    5
  76.  
  77.     #else
  78.         #error Incorrect number of bits per pixel
  79.     #endif
  80. typedef struct {
  81.     int                xsize, ysize;
  82.     int                linesize;                /* line size, in bytes */
  83.     int                mode;
  84.  
  85.     unsigned short    *zbuf;
  86.     PIXEL            *pbuf;                    // frame buffer
  87.     int                frame_buffer_allocated; // indicates if the frame buffer was allocated in ZB_open
  88.  
  89.     int                nb_colors;
  90.     unsigned char    *dctable;
  91.     int                *ctable;
  92.     PIXEL            *current_texture;
  93. } ZBuffer;
  94.  
  95. typedef struct {
  96.     int        x, y, z;                        /* integer coordinates in the zbuffer */
  97.     int        s, t;        /* coordinates for the mapping */
  98.     int        r, g, b;    /* color indexes */
  99.  
  100.     float    sz, tz;        /* temporary coordinates for mapping */
  101. } ZBufferPoint;
  102.  
  103. /* zbuffer.c */
  104. ZBuffer *ZB_open(int xsize, int ysize, int mode, int nb_colors, unsigned char *color_indexes,
  105.                  int *color_table, void *frame_buffer);
  106.  
  107. void    ZB_close(ZBuffer *zb);
  108.  
  109. void    ZB_resize(ZBuffer *zb, void *frame_buffer, int xsize, int ysize);
  110. void    ZB_clear(ZBuffer *zb, int clear_z, int z, int clear_color, int r, int g, int b);
  111.  
  112. /* linesize is in BYTES */
  113. void    ZB_copyFrameBuffer(ZBuffer *zb, void *buf, int linesize);
  114.  
  115. /* zdither.c */
  116. void    ZB_initDither(ZBuffer *zb, int nb_colors, unsigned char *color_indexes, int *color_table);
  117. void    ZB_closeDither(ZBuffer *zb);
  118. void    ZB_ditherFrameBuffer(ZBuffer *zb, unsigned char *dest, int linesize);
  119.  
  120. /* zline.c */
  121. void    ZB_plot(ZBuffer *zb, ZBufferPoint *p);
  122. void    ZB_line(ZBuffer *zb, ZBufferPoint *p1, ZBufferPoint *p2);
  123. void    ZB_line_z(ZBuffer *zb, ZBufferPoint *p1, ZBufferPoint *p2);
  124.  
  125. /* ztriangle.c */
  126. void    ZB_setTexture(ZBuffer *zb, PIXEL *texture);
  127. void    ZB_fillTriangleFlat(ZBuffer *zb, ZBufferPoint *p1, ZBufferPoint *p2, ZBufferPoint *p3);
  128. void    ZB_fillTriangleSmooth(ZBuffer *zb, ZBufferPoint *p1, ZBufferPoint *p2, ZBufferPoint *p3);
  129. void    ZB_fillTriangleMappingPerspective(ZBuffer *zb, ZBufferPoint *p0, ZBufferPoint *p1,
  130.                                           ZBufferPoint *p2);
  131. void    ZB_fillTriangleFlatBlend(ZBuffer *zb, ZBufferPoint *p0, ZBufferPoint *p1, ZBufferPoint *p2,
  132.                                  float alpha);
  133. void    ZB_fillTriangleSmoothBlend(ZBuffer *zb, ZBufferPoint *p1, ZBufferPoint *p2, ZBufferPoint *p3,
  134.                                    float alpha);
  135.  
  136. typedef void (*ZB_fillTriangleFunc) (ZBuffer *, ZBufferPoint *, ZBufferPoint *, ZBufferPoint *);
  137. #endif /* _tgl_zbuffer_h_ */
  138.